package coin;

import java.util.Random;


public class SimpleGame {

	/**
	 * 你正在图书馆枯坐，一位陌生美女主动过来和你搭讪，并要求和你一起玩个数学游戏。
	 * 美女提议：让我们各自亮出硬币的一面，或正或反。
	 * 如果我们都是正面，那么我给你3元，
	 * 如果我们都是反面，我给你1元，
	 * 剩下的情况你给我2元就可以了。
	 * 各位请帮忙分析一下，该不该和这位姑娘玩这个游戏呢？
	 * @param args
	 */
	public static void main(String[] args) {
		for (int i = 0; i < 1; i++) {
			
			Game xGame = new Game(1000) ;
			Player p1 = new Player("帅哥",0) ;
			Player p2 = new Player("美女",10) ;
			
			xGame.work(p1,p2) ;
			
			p1.status() ;
		}
	}


}
class Game{
	
	int loopcount  ;
	
	public Game(int loop){
		this.loopcount = loop ;
	}
	/**
	 * @param p1
	 * @param p2
	 */
	public void work(Player p1,Player p2){
		
		for (int i = 0; i < this.loopcount; i++) {
			onerun(p1, p2,i) ;
		}
	}
	
	void onerun(Player p1,Player p2,int i){
		int n1 = p1.flipCoin(-1l*i) ;
		int n2 = p2.flipCoin(i) ;
		
		p1.rember(n2) ;
		
		//System.out.println("n1="+n1 +"|n2="+n2);
		
		if (isHead(n1) && isHead(n2)) {
			p1.update(3) ;
		} else if (!isHead(n1) && !isHead(n2)) {
			p1.update(1) ;
		} else{
			p1.update(-2) ;
		}
	}
	
	boolean isHead(int i){
	// 1-50 为 正面
		if (i<=50) {
			return true ;
		}
		return false ;
	}
	
	
}
class Player{
	String name ;
	public long money =  0 ;
	int win ;
	int win3 ;
	int win1 ;
	int all ;
	int lose ;
	
	int rember =-1;
	Random random = new Random(System.currentTimeMillis()) ;
	int sub ;
	/**
	 * @param name 名字
	 * @param sub 出现正反面的几率偏差  
	   随机数rand 范围为 1-100的数字， 小于等于50为正面， 否则为为反面 
	   如果sub位-10 则 所有的rand值+sub值，则正面几率增大，为0 则为正常随机	 
	 */
	public Player(String name,int sub){
		this.name = name ;
		this.sub = sub ;
	}
	//采取跟随策略
	//记住美女的上一轮出牌，下一次和她出一样的 
	public void rember(int n2) {
		this.rember = n2 ;
		
	}
	public void update(int i) {
		all++;
		if (i>0) {
			win ++ ;
			if (i==3) {
				win3 ++ ;
			}
			if (i==1) {
				win1++ ;
			}
			
		}else{
			lose ++ ;
		}
		money +=i ;
	}
	int flipCoin(long seed){
		
		if (rember!=-1) {
			return rember ;
		}
		
		random.setSeed(System.currentTimeMillis()+seed) ;
		int tt= random.nextInt(100)+1 +sub ;
		return tt ;
	}
	void status(){
		System.out.println("[name="+name+"] [money="+money+"] [all="+all+"] [lose="+lose+"] [win="+win+"] [win3="+win3+"] [win1="+win1+"]");
	}
	
}
